package vista;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import modelo.Barco;
import modelo.Buque;
import modelo.Lancha;
import modelo.Parte;
import modelo.Portaaviones;
import modelo.RompeHielos;
import fiuba.algo3.titiritero.dibujables.Imagen;
import fiuba.algo3.titiritero.modelo.GameLoop;
import fiuba.algo3.titiritero.modelo.ObjetoDibujable;
import fiuba.algo3.titiritero.modelo.ObjetoVivo;
import fiuba.algo3.titiritero.modelo.SuperficieDeDibujo;

public class VistaBarco implements ObjetoDibujable{
	Imagen imagen;
	BarcoPosicionable barcoPosicionable;
	Barco barco;
	List<VistaParteRota> vistasDePartesRotas;
	private List<Parte> partesRotas;
	
	public VistaBarco(Barco unBarco) {
		vistasDePartesRotas = new ArrayList<VistaParteRota>();
		partesRotas = new ArrayList<Parte>();
		barco = unBarco;
  		barcoPosicionable = new BarcoPosicionable(barco);
		Class<? extends Barco> claseBarco = barco.getClass();
		String direccion = null;
		URL url = null;
		
		if (claseBarco == Lancha.class) {
			if (barcoPosicionable.estaVertical()) {
				direccion = "/imagenes/LanchaVertical.png";
			}
			else {
				direccion = "/imagenes/LanchaHorizontal.png";				
			}
		}
		else if (claseBarco == Buque.class) {
			if (barcoPosicionable.estaVertical()) {
				direccion = "/imagenes/BuqueVertical.png";
			}
			else {
				direccion = "/imagenes/BuqueHorizontal.png";				
			}
		}
		else if (claseBarco == RompeHielos.class) {
			if (barcoPosicionable.estaVertical()) {
				direccion = "/imagenes/RompeHielosVertical.png";
			}
			else {
				direccion = "/imagenes/RompeHielosHorizontal.png";				
			}
		}
		else if (claseBarco == Portaaviones.class) {
			if (barcoPosicionable.estaVertical()) {
				direccion = "/imagenes/PortaavionesVertical.png";
			}
			else {
				direccion = "/imagenes/PortaavionesHorizontal.png";				
			}
		}
		else {
			if (barcoPosicionable.estaVertical()) {
				direccion = "/imagenes/DestructorVertical.png";
			}
			else {
				direccion = "/imagenes/DestructorHorizontal.png";				
			}
		}
		
		try {
			url = new URL("file:///" + System.getProperty("user.dir") + direccion);
			imagen = new Imagen(url, barcoPosicionable);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void dibujar(SuperficieDeDibujo superficieDeDibujo) {
		imagen.dibujar(superficieDeDibujo);
	}

	public ObjetoVivo getPosicionable() {
		return barcoPosicionable;
	}

	public void agregarParteRota(VistaParteRota vistaParteRota,GameLoop gameLoop, Parte parteRota) {
		vistasDePartesRotas.add(vistaParteRota);
		partesRotas.add(parteRota);
		gameLoop.agregar(vistaParteRota);
	}
	
	public void removerPartesRotas(GameLoop gameLoop) {
		for (VistaParteRota vistaParteRota: vistasDePartesRotas) {
			gameLoop.remover(vistaParteRota);
		}
	}
	
	public Barco getBarco() {
		return barco;
	}

	public boolean parteRotaEsta(Parte unaParteRota) {
		boolean esta = false;
		for (Parte parteRota : partesRotas) {
			if (parteRota == unaParteRota) {
				esta = true;
			}
		}
		
		return esta;
	}
}
